package com.authine.cloudpivot.web.api.secondopen.service;

import com.authine.cloudpivot.web.api.secondopen.domain.Sendresult;
import com.authine.cloudpivot.web.api.secondopen.modules.*;
import com.authine.cloudpivot.web.api.secondopen.modules.AdAddrAndNameVO;
import com.authine.cloudpivot.web.api.secondopen.modules.CreditorTypeVO;
import com.authine.cloudpivot.web.api.secondopen.modules.CustomerVO;
import com.authine.cloudpivot.web.api.secondopen.modules.ProductVO;
import com.authine.cloudpivot.web.api.secondopen.modules.ProviderVO;
import com.authine.cloudpivot.web.api.secondopen.modules.VoucherVO;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface QadInterfaceService {

    /**
     * 同步科目信息数据
     *
      */
    public void syncSubjectDataInService();


    /**
     * 同步供应商信息数据
     *
     */
    public void syncSupplierDataInService();

    /**
     * 获取供应商信息
     * @param params
     * @return
     */
    public List<ProviderVO> providerInfoGet(Map<String, String> params);

    /**
     * 获取客户信息
     * @param params
     * @return
     */
    public List<CustomerVO> customerInfoGet(Map<String, String> params);

    /**
     * 根据主账户-分账户-成本中心，查询项目号
     *
     * @param oneSubjectCode
     * @param twoSubjectCode
     * @param cbzx
     * @return
     */
    public List<ProductVO> getProductNoByParamInterface(String oneSubjectCode, String twoSubjectCode, String cbzx);

    /**
     * 查询当天汇率信息
     *
     * @param qadExrCurrZf
     * @param qadExrCurrBzf
     * @return
     */
    public BigDecimal getQadZshlByParam(String qadExrCurrZf, String qadExrCurrBzf);


    /**
     * 生成qad凭证
     *
     * @return
     */
    public QadResultVO generateQadVoucher(VoucherVO voucherVO);

    /**
     * 获取供应商编码、名称
     * @param params
     * @return
     */
    public List<AdAddrAndNameVO> adAddrAndNamesGet(Map<String, String> params);

    /**
     * 获取供应商类型
     * @param params
     * @return
     */
    public List<CreditorTypeVO> getCreditorType(Map<String, String> params);

    /**
     * 根据起始时间，供应商编码类型查询客户发票信息
     *
     * @return
     */
    public List<QadCInvoiceDeatail> getQadCInvoiceByParam(String startDate, String endDate, String gysCodeType);

    /**
     * 对返回的qad发票数据进行list去重，并求出总和
     *
     * @param qadCInvoiceDeatails
     * @return
     */
    public List<QadCInvoiceDeatail> removalQadCInvoiceDeatails(List<QadCInvoiceDeatail> qadCInvoiceDeatails);

    /**
     *  根据客户代码和商品编码查询 当前时间小于到期时间的所有销售订单
     * @param params
     * @param time
     * @return
     */
    List<SalesOrderVO> salesOrderGet(Map<String, String> params, Date time);

    /**
     *  获取所有库位信息
     * @param qadLoc
     * @return
     */
    List<LocVO> getAllLoc(String qadLoc);

    /**
     * 银行分录接口
     *
     * @param mdmBankEntry
     * @return
     */
    public QadResultVO qadInMdmBankEntryPost(MdmBankEntry mdmBankEntry);
}
